/***************************************************
File name: client.c
Author:Chenchunjian
Data:2012
Description:聊天软件客户端main函数
***************************************************/
#include "client_main.h"

int main(int argc, char *argv[])
{
	int ret;
    	int do_number;
    	char str[MAXLEN];
    	char buf[MAXLEN];
	char buf_new[100];
    	struct message msg;
	struct message a;
	struct sockaddr_in my_addr;
    	time_t timep;
	enum action{log=1,reg,ex};
	struct hostent *host;
    	if(argc!=2)
	{
		fprintf(stderr,"Usage:%s hostname \a\n",argv[0]);
		exit(1);
	}
	if((host=gethostbyname(argv[1]))==NULL)
	{
		fprintf(stderr,"Gethostname error\n");
		exit(1);
	}
	while(1)
	{
		if((sockfd=my_socket(PF_INET,SOCK_STREAM,0)) < 0)  /*创建套接字，使用TCP协议*/
	        {
	    	    exit(-1);
	    	}
		bzero(&my_addr,sizeof(struct sockaddr_in));      /*清空地址结构*/
		my_addr.sin_family = AF_INET;                     /*使用IPV4通信域*/
		my_addr.sin_port = htons(PORT);                   /*端口号转换为网络字节序*/
		my_addr.sin_addr = *((struct in_addr *)host->h_addr);      /*可接受任意地址*/
		//可以使用：my_connect的断开重新链接功能；
		if(connect(sockfd,(struct sockaddr *)(&my_addr),sizeof(my_addr)) == -1)  /*主动连接服务器*/
		{
			printf("正在连接，请稍等……\n");
			exit(1);
		}
	    	do_number = Interface();     /*登录界面*/
	    	switch(do_number)
        	{
            		case log:               /*登录*/
		        {
				 int n = 3;
				 while(n)
				 {
					 log_user(&a);
					 if(strcmp(a.msg,"hello,admin!") == 0)    /*管理员登录成功*/
					 {
					     	if(login_admin(&a) == 0)
					     	{
					        	 return FAULT;
					     	}
					 }
					 if(my_strcmp(a.msg,"login,success!") == 0)   /*用户登录成功*/
					 {
					   	 if(login_success(&a) == FAULT)
					    	 {
							return FAULT;
					         }
					 }
					 else                                       /*登录未成功*/
					 {
					         n--;
						 printf("你还有 %d次机会!\n",n);
					 }
				}
				my_close(sockfd);
				exit(3);
			        break;
	    	        }
		    	case reg:     /*注册*/
		    	{
				 Register(&a);
	               		 break;
		    	}
		    	case ex:      /*退出*/
		    	{
			    	 my_close(sockfd);
		        	 printf("离开聊天室！\n");
    				 break;
	    		}
		    	default:
    			{
	    			break;
		    	}
	    }
	}
    my_close(sockfd);
    return FAULT;
}

